/*!
 * artDialog-plus
 * Date: 2013-11-09
 * https://github.com/aui/artDialog
 * (c) 2009-2014 TangBin, http://www.planeArt.cn
 *
 * This is licensed under the GNU LGPL, version 2.1 or later.
 * For details, see: http://www.gnu.org/licenses/lgpl-2.1.html
 */
define(function(require) {

    var $ = require('jquery');
    var dialog = require('./dialog');
    var drag = require('./drag');

    dialog.oncreate = function(api) {

        var options = api.options;
        var originalOptions = options.original;

        // 页面地址
        var url = options.url;
        // 页面加载完毕的事件
        var oniframeload = options.oniframeload;

        var $iframe;


        if (url) {
            this.padding = options.padding = 0;

            $iframe = $('<iframe />');

            $iframe.attr({
                    src: url,
                    name: api.id,
                    width: '100%',
                    height: '100%',
                    allowtransparency: 'yes',
                    frameborder: 'no',
                    scrolling: 'no'
                })
                .on('load', function() {
                    var test;

                    try {
                        // 跨域测试
                        test = $iframe[0].contentWindow.frameElement;
                    } catch (e) {}

                    if (test) {

                        if (!options.width) {
                            api.width($iframe.contents().width());
                        }

                        if (!options.height) {
                            api.height($iframe.contents().height());
                        }
                    }

                    if (oniframeload) {
                        oniframeload.call(api);
                    }

                });

            api.addEventListener('beforeremove', function() {

                // 重要！需要重置iframe地址，否则下次出现的对话框在IE6、7无法聚焦input
                // IE删除iframe后，iframe仍然会留在内存中出现上述问题，置换src是最容易解决的方法
                $iframe.attr('src', 'about:blank').remove();


            }, false);

            api.content($iframe[0]);

            api.iframeNode = $iframe[0];

        }


        // 对于子页面呼出的对话框特殊处理
        // 如果对话框配置来自 iframe
        if (!(originalOptions instanceof Object)) {

            var un = function() {
                api.close().remove();
            };

            // 找到那个 iframe
            for (var i = 0; i < frames.length; i++) {
                try {
                    if (originalOptions instanceof frames[i].Object) {
                        // 让 iframe 刷新的时候也关闭对话框，
                        // 防止要执行的对象被强制收回导致 IE 报错：“不能执行已释放 Script 的代码”
                        $(frames[i]).one('unload', un);
                        break;
                    }
                } catch (e) {}
            }
        }


        // 拖拽支持
        $(api.node).on(drag.types.start, '[i=title]', function(event) {
            // 排除气泡类型的对话框
            if (!api.follow) {
                api.focus();
                drag.create(api.node, event);
            }
        });

    };



    dialog.get = function(id) {

        // 从 iframe 传入 window 对象
        if (id && id.frameElement) {
            var iframe = id.frameElement;
            var list = dialog.list;
            var api;
            for (var i in list) {
                api = list[i];
                if (api.node.getElementsByTagName('iframe')[0] === iframe) {
                    return api;
                }
            }
            // 直接传入 id 的情况
        } else if (id) {
            return dialog.list[id];
        }

    };



    return dialog;

});